package model

import (
	"think/common"
)

// User 用户模型结构体
type User struct {
	common.Model
}

// TableName 设置表名
func (u *User) TableName() string {
	return "user"
}

// NewUser 创建一个新的用户模型实例
func NewUser() *User {
	user := &User{}
	user.Table(user.TableName())
	return user
}

// GetUserByID 根据ID获取用户信息
func (u *User) GetUserByID(id interface{}) map[string]interface{} {
	result := u.Get(id)
	if result != nil {
		return result.(map[string]interface{})
	}
	return nil
}

// GetUsers 获取用户列表
func (u *User) GetUsers(page, pageSize int) []interface{} {
	return u.Page(page, pageSize).Find()
}

// GetActiveUsers 获取活跃用户列表
func (u *User) GetActiveUsers() []interface{} {
	return u.WhereEQ("status", 1).Order("created_at", "DESC").Find()
}

// CreateUser 创建新用户
func (u *User) CreateUser(data map[string]interface{}) bool {
	return u.Save(data)
}

// UpdateUser 更新用户信息
func (u *User) UpdateUser(id interface{}, data map[string]interface{}) bool {
	return u.WhereEQ("id", id).Update(data)
}

// DeleteUser 删除用户
func (u *User) DeleteUser(id interface{}) bool {
	return u.WhereEQ("id", id).Delete()
}

// CountUsers 统计用户数量
func (u *User) CountUsers() int64 {
	return u.Count()
}

// CountActiveUsers 统计活跃用户数量
func (u *User) CountActiveUsers() int64 {
	return u.WhereEQ("status", 1).Count()
}

// GetUserByUsername 根据用户名获取用户信息
func (u *User) GetUserByUsername(username string) map[string]interface{} {
	return u.WhereEQ("username", username).FindOne().(map[string]interface{})
}

// GetUsersByRole 根据角色获取用户列表
func (u *User) GetUsersByRole(roleID int) []interface{} {
	return u.WhereEQ("role_id", roleID).Order("id", "ASC").Find()
}

// SearchUsers 搜索用户
func (u *User) SearchUsers(keyword string) []interface{} {
	return u.WhereLike("username", keyword).WhereOr("nickname", keyword).Find()
}

// GetUsersWithCondition 带条件获取用户列表
func (u *User) GetUsersWithCondition(conditions map[string]interface{}) []interface{} {
	// 遍历条件并添加到查询中
	for field, value := range conditions {
		u.WhereEQ(field, value)
	}
	return u.Find()
}

// GetUserStats 获取用户统计信息
func (u *User) GetUserStats() map[string]int64 {
	// 统计不同状态的用户数量
	activeCount := u.WhereEQ("status", 1).Count()
	disabledCount := u.WhereEQ("status", 0).Count()
	totalCount := u.Count()

	return map[string]int64{
		"active":   activeCount,
		"disabled": disabledCount,
		"total":    totalCount,
	}
}

// GetUsersOrderByScore 获取按分数排序的用户
func (u *User) GetUsersOrderByScore(limit int) []interface{} {
	return u.WhereGT("id", 0).Order("id", "DESC").Limit(limit).Find()
}

// BatchDeleteUsers 批量删除用户
func (u *User) BatchDeleteUsers(ids []interface{}) bool {
	return u.WhereIN("id", ids).Delete()
}

// BatchUpdateUsersStatus 批量更新用户状态
func (u *User) BatchUpdateUsersStatus(ids []interface{}, status int) bool {
	return u.WhereIN("id", ids).Update(map[string]interface{}{"status": status})
}

// GetUserGroupByRole 按角色分组获取用户数量
func (u *User) GetUserGroupByRole() []interface{} {
	return u.Field("role_id, COUNT(*) as user_count").Group("role_id").Find()
}
